package com.example.redislearning.service;

import com.example.redislearning.entity.Course;

import java.util.List;
import java.util.Map;

/**
 * 购物车服务接口
 * 使用Redis Hash存储购物车信息
 */
public interface CartService {

    /**
     * 添加商品到购物车
     * @param userId 用户ID
     * @param courseId 课程ID
     * @param quantity 数量
     */
    boolean addToCart(Integer userId, Integer courseId, Integer quantity);

    /**
     * 从购物车移除商品
     * @param userId 用户ID
     * @param courseId 课程ID
     */
    boolean removeFromCart(Integer userId, Integer courseId);

    /**
     * 获取用户购物车内容
     * @param userId 用户ID
     * @return Map<课程ID, 数量>
     */
    Map<String, Object> getCartItems(Integer userId);

    /**
     * 获取购物车详细信息
     * @param userId 用户ID
     * @return 包含课程详细信息的购物车项
     */
    List<Map<String, Object>> getCartDetails(Integer userId);

    /**
     * 更新购物车商品数量
     * @param userId 用户ID
     * @param courseId 课程ID
     * @param quantity 新数量
     */
    boolean updateCartItemQuantity(Integer userId, Integer courseId, Integer quantity);

    /**
     * 清空购物车
     * @param userId 用户ID
     */
    boolean clearCart(Integer userId);

    /**
     * 获取购物车商品总数
     * @param userId 用户ID
     */
    Integer getCartItemCount(Integer userId);

    /**
     * 获取购物车总价
     * @param userId 用户ID
     */
    Double getCartTotalPrice(Integer userId);

    /**
     * 批量添加商品到购物车
     */
    boolean batchAddToCart(Integer userId, Map<Integer, Integer> items);

    /**
     * 批量移除购物车商品
     */
    boolean batchRemoveFromCart(Integer userId, List<Integer> courseIds);

    boolean mergeCart(Integer userId, Map<Integer, Integer> tempCartItems);

    /**
     * 检查商品是否在购物车中
     * @param userId 用户ID
     * @param courseId 课程ID
     */
    boolean isInCart(Integer userId, Integer courseId);

    Map<Integer, Integer> getInvalidCartItems(Integer userId);

    boolean removeInvalidItems(Integer userId);
}